package com.majun;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import reactor.tools.agent.ReactorDebugAgent;

public class ReactTest {

	public static void main(String[] args) {
		// 方式一:
		// Hooks.onOperatorDebug();
		// 方式二:
		ReactorDebugAgent.init();
		ReactorDebugAgent.processExistingClasses();

		TestDebug();
	}

	public static void Test01() {
		// 创建 Flux 响应流
		Flux<String> source = Flux.just("foo", "bar");
		// 使用 concatWith 操作符连接 2 个响应流
		Flux<String> boom = source.concatWith(Mono.error(new IllegalArgumentException("boom")));
		// 创建一个 StepVerifier 构造器来包装和校验一个 Flux。
		StepVerifier.create(boom).expectNext("foo") // 第一个我们期望的信号是 onNext，它的值为 foo
				.expectNext("bar") // 第二个我们期望的信号是 onNext，它的值为 bar
				.expectErrorMessage("boom") // 最后我们期望的是一个终止信号 onError，异常内容应该为 boom
				.verify(); // 使用 verify() 触发测试。
	}

	public static void TestDebug() {
		Flux.range(1, 3).flatMap(n -> Mono.just(n + 100)).single().map(n -> n * 2).subscribe(System.out::println);
	}
}
